<?php
/**
 * 
 * 系统文件加载类
 * @author yucy<yucy1985@gmail.com>
 *
 */
class YucyAutoloader
{
	/**
	 * 
	 * 类文件是否存在
	 * @param string $name
	 */
	public static function has($name)
	{
		return class_exists($name, false);
	}
	
	
	/**
	 * 
	 * 加载类文件
	 * @param string $name 类名
	 * @return bool
	 */
	public static function load($name)
	{
		if (self::has($name)) return true;
		
		if (substr($name, -4) == 'Tool')
		{
			return self::loadTool($name);
		}
		
		if (substr($name, -10) == 'Dispatcher')
		{
			return self::loadDispatcher($name);
		}
		
		if (substr($name, -6) == 'Helper')
		{
			return self::loadHelper($name);
		}
		
		return self::loadVendor($name);
	}
	
	
	/**
	 * 
	 * 加载调度器文件
	 * @param string $name 类名
	 * @return bool
	 */
	protected static function loadDispatcher($name)
	{
		$path = YUCY_PATH . DS . 'Dispatcher' . DS . $name . '.php';
		return self::loadFile($path);
	}
	
	
	/**
	 * 
	 * 加载助手文件
	 * @param string $name 类名
	 * @return bool
	 */
	protected static function loadHelper($name)
	{
		$path = YUCY_PATH . DS . 'Helper' . DS . $name . '.php';
		return self::loadFile($path);
	}
	
	
	/**
	 * 
	 * 加载第三方类库
	 * @param string $name
	 * @return bool
	 */
	protected static function loadVendor($name)
	{
		$path = YUCY_PATH . DS . 'Vendor' . DS . $name . '.php';
		return self::loadFile($path);
	}
	
	
	/**
	 * 
	 * 加载工具类
	 * @param string $name
	 * @return bool
	 */
	protected static function loadTool($name)
	{
		$path = YUCY_PATH . DS . 'Tool' . DS . $name . '.php';
		
		return self::loadFile($path);
	}
	
	
	protected static function loadFile($filePath)
	{
		if (!file_exists($filePath)) throw new YucyException("文件没有找到：{$filePath}", 101);
		require_once $filePath;
		return true;
	}
}